package sv.com.renacempleo.dao.ciiu;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;

import sv.com.renacempleo.dao.BaseDaoImpl;
import sv.com.renacempleo.dto.ciiu.ActividadesRegistroContribuyente;
import sv.com.renacempleo.exception.WebException;

public class ActividadesRegistroContribuyenteDaoImpl extends BaseDaoImpl implements ActividadesRegistroContribuyenteDao{

	@SuppressWarnings("unchecked")
	@Override
	public List<Object[]> findAllAsArray() throws WebException {
		DetachedCriteria criteria = DetachedCriteria.forClass(ActividadesRegistroContribuyente.class);
		criteria.addOrder(Order.asc("actividadRegistroContribuyenteId"));
		criteria.setProjection(Projections.projectionList().
				add(Projections.property("actividadRegistroContribuyenteId")).
				add(Projections.property("actividadRegistroContribuyenteNombre"))
		);
		return (List<Object[]>) findByCriteria(criteria);
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Object[]> findAllByCIIU04(String ciiu01Codigo,
			String ciiu02Codigo, String ciiu03Codigo, String ciiu04Codigo)
			throws WebException {
		DetachedCriteria criteria = DetachedCriteria.forClass(ActividadesRegistroContribuyente.class);
		criteria.addOrder(Order.asc("actividadRegistroContribuyenteId"));
		criteria.createAlias("ciiu01", "ciiu01");
		criteria.createAlias("ciiu02", "ciiu02");
		criteria.createAlias("ciiu03", "ciiu03");
		criteria.createAlias("ciiu04", "ciiu04");
		criteria.add(Restrictions.eq("ciiu01.ciiu01Codigo", ciiu01Codigo));
		criteria.add(Restrictions.eq("ciiu02.ciiu02Codigo", ciiu02Codigo));
		criteria.add(Restrictions.eq("ciiu03.ciiu03Codigo", ciiu03Codigo));
		criteria.add(Restrictions.eq("ciiu04.ciiu04Codigo", ciiu04Codigo));
		criteria.setProjection(Projections.projectionList().
				add(Projections.property("ciiu01.ciiu01Codigo")).
				add(Projections.property("ciiu02.ciiu02Codigo")).
				add(Projections.property("ciiu03.ciiu03Codigo")).
				add(Projections.property("ciiu04.ciiu04Codigo")).
				add(Projections.property("actividadRegistroContribuyenteId")).
				add(Projections.property("actividadRegistroContribuyenteNombre"))
		);
		return (List<Object[]>) findByCriteria(criteria);
	}

	@SuppressWarnings("unchecked")
	@Override
	public void delete(String ciiu01Codigo, String ciiu02Codigo,
			String ciiu03Codigo, String ciiu04Codigo, Long actividadId)
			throws WebException {
		DetachedCriteria criteria = DetachedCriteria.forClass(ActividadesRegistroContribuyente.class);
		criteria.addOrder(Order.asc("actividadRegistroContribuyenteId"));
		criteria.createAlias("ciiu01", "ciiu01");
		criteria.createAlias("ciiu02", "ciiu02");
		criteria.createAlias("ciiu03", "ciiu03");
		criteria.createAlias("ciiu04", "ciiu04");
		criteria.add(Restrictions.eq("ciiu01.ciiu01Codigo", ciiu01Codigo));
		criteria.add(Restrictions.eq("ciiu02.ciiu02Codigo", ciiu02Codigo));
		criteria.add(Restrictions.eq("ciiu03.ciiu03Codigo", ciiu03Codigo));
		criteria.add(Restrictions.eq("ciiu04.ciiu04Codigo", ciiu04Codigo));
		criteria.add(Restrictions.eq("actividadRegistroContribuyenteId", actividadId));
		
		List <ActividadesRegistroContribuyente> lsActividad = new ArrayList<ActividadesRegistroContribuyente>();
		lsActividad = (List<ActividadesRegistroContribuyente>) findByCriteria(criteria);
		
		if(lsActividad.size()>0)
		{
			deleteAll(findByCriteria(criteria));		
			//deleteAll(findByCriteria(criteria));
		}
		
	}

}
